<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>组件</title>
    <style type="text/css">
        
    </style>
</head>
<body>
    <div id="app">
        <my-component></my-component>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //组件有生命周期，组件也分为两种，全局组件，局部组件
        //组件化开发，抽离组件实现复用的效果
        //方便维护代码
        //组件级更新，给每一个组件都添加一个watcher
        //能抽离成单个组件就尽量抽离，可以减少更新（独立）
        //组件其实就是一个对象
        //组件的实例化过程会通过当前传入的对象创建出来一个实例

        //Vue.extend构建一个子类，返回的是一个子类的构造器
        let Ctor = Vue.extend({
            template:'<div>{{msg}}</div>',
            data(){
                return {
                    msg:'hello'
                }
            }
        })
        //可以手动挂载组件，在id='app'外面
        document.body.appendChild(new Ctor().$mount().$el);
        //Vue.component会调用这个Vue.extend方法
        Vue.component('my-component',Ctor)
        // Vue.component('my-component',{
        //     template:'<div>{{msg}}</div>',
        //     data(){//data必须是一个函数，为了防止组件之间的数据相互引用
        //         return {
        //             msg:'hello'
        //         }
        //     }
        // })
        //组件使用 可以在父级的模板中使用
        let vm = new Vue({
            el:'#app',
            data(){
                return {
                    
                }
            },
            
        })
    </script>

</body>
</html>